package analisis.matrizContingencia;

import java.util.List;

/**
 * @file FMeasure.java
 * @author Juan Humanes Ferrer
 * @date 14-Marzo-2014
 *
 */
public final class FMeasure implements IMedida {

    private double fMeasure;

    public FMeasure() {
        setfMeasure(0.0);
    }

    /**
     * Método que retorna el fMeasure
     *
     * @return fMeasure
     */
    public double getfMeasure() {
        return fMeasure;
    }

    /**
     * Métodod que modifica el valor de fMeasure
     *
     * @param fMeasure
     */
    public void setfMeasure(double fMeasure) {
        this.fMeasure = fMeasure;
    }

    /**
     * Método que calcula el fmeasure
     *
     * @param tp
     * @param tn
     * @param fp
     * @param fn
     * @param valoresMedidas
     */
    @Override
    public void calculaMedida(double tp, double tn, double fp, double fn, List<IMedida> valoresMedidas) {
        double result = Double.POSITIVE_INFINITY;

        double precision = valoresMedidas.get(0).verValor(); //En la posicion 0 esta el valor de Precision
        double recall = valoresMedidas.get(1).verValor(); //En la posicion 1 esta el valor de Recall

        if (precision != Double.POSITIVE_INFINITY && recall != Double.POSITIVE_INFINITY) {
            if (recall != 0.0 && precision != 0.0) {
                result = (2.0 * recall + precision) / (recall + precision);
            }
        }

        setfMeasure(result);
    }

    @Override
    public Double verValor() {
        return getfMeasure();
    }
}
